package com.pine.common.beans.exception;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 异常编码枚举
 *
 * @author pine manage
 * @since 2024-08-09
 */
@Getter
@AllArgsConstructor
public enum ExceptionCodeEnum implements ExceptionCode {

    SUCCESS("0", "成功"),

    UNAUTHORIZED("401", "未认证"),
    FORBIDDEN("403", "禁止访问"),
    NOT_FOUND("404", "没有找到资源"),
    METHOD_NOT_ALLOWED("405", "不支持当前请求类型"),
    // 接口限流
    TOO_MANY_REQUESTS("429", "请求过于频繁"),
    INTERNAL_SERVER_ERROR("500", "内部服务错误"),
    BAD_GATEWAY("502", "网关错误"),
    GATEWAY_TIMEOUT("504", "网关超时"),

    // --业务异常编码
    PARAM_ERROR("1000", "参数错误"),
    PARAM_NOT_NULL("1001", "参数不能为空"),
    PARAM_NOT_VALID("1002", "参数校验失败"),
    PARAM_NOT_MATCH("1003", "参数不匹配"),
    PARAM_NOT_EXIST("1004", "参数不存在"),
    PARAM_NOT_FOUND("1005", "参数未找到"),
    PARAM_NOT_SUPPORT("1006", "参数不支持"),
    PARAM_NOT_ALLOWED("1007", "参数不允许"),

    // --系统异常编码
    SYSTEM_ERROR("2000", "系统错误"),
    SYSTEM_BUSY("2001", "系统繁忙"),
    SYSTEM_TIMEOUT("2002", "系统超时"),
    SYSTEM_NOT_SUPPORT("2003", "系统不支持"),
    SYSTEM_NOT_ALLOWED("2004", "系统不允许"),
    SYSTEM_NOT_FOUND("2005", "系统未找到"),
    SYSTEM_NOT_EXIST("2006", "系统不存在"),
    SYSTEM_NOT_VALID("2007", "系统校验失败"),

    // --CRUD业务操作异常编码
    CREATE_ERROR("3000", "创建失败"),
    UPDATE_ERROR("3001", "更新失败"),
    DELETE_ERROR("3002", "删除失败"),
    SELECT_ERROR("3003", "查询失败"),
    SELECT_NOT_EXIST("3004", "查询结果不存在"),
    SELECT_NOT_FOUND("3005", "查询结果未找到"),
    SELECT_NOT_ALLOWED("3006", "查询结果不允许"),
    SELECT_NOT_SUPPORT("3007", "查询结果不支持"),
    SELECT_NOT_MATCH("3008", "查询结果不匹配"),
    SELECT_NOT_VALID("3009", "查询结果校验失败"),
    SELECT_NOT_NULL("3010", "查询结果不能为空"),

    // --导出异常编码
    EXPORT_ERROR("4000", "导出失败"),
    EXPORT_NOT_SUPPORT("4001", "导出不支持"),
    EXPORT_NOT_ALLOWED("4002", "导出不允许"),
    EXPORT_NOT_FOUND("4003", "导出未找到"),
    EXPORT_NOT_EXIST("4004", "导出不存在"),
    EXPORT_NOT_VALID("4005", "导出校验失败"),
    EXPORT_NOT_MATCH("4006", "导出不匹配"),
    EXPORT_NOT_NULL("4007", "导出不能为空"),
    EXPORT_TOO_MUCH("4008", "导出数据量过大"),

    // --导入异常编码
    IMPORT_ERROR("5000", "导入失败"),
    IMPORT_NOT_SUPPORT("5001", "导入不支持"),
    IMPORT_NOT_ALLOWED("5002", "导入不允许"),
    IMPORT_NOT_FOUND("5003", "导入未找到"),
    IMPORT_NOT_EXIST("5004", "导入不存在"),
    IMPORT_NOT_VALID("5005", "导入校验失败"),
    IMPORT_NOT_MATCH("5006", "导入不匹配"),
    IMPORT_TEMPLATE_ERROR("5007", "获取导入模版错误"),

    // --用户未登录
    USER_NOT_LOGIN("4010", "用户未登录"),
    USER_NOT_EXIST("4011", "用户不存在"),
    USER_NOT_MATCH("4012", "用户不匹配"),
    // --用户被禁用
    USER_DISABLED("4013", "用户被禁用"),

    // --用户权限不足
    USER_NOT_AUTHORIZED("4014", "用户权限不足"),
    // --用户角色错误
    USER_ROLE_ERROR("4015", "用户角色错误"),
    // --用户已存在
    USER_EXIST("4016", "用户已存在"),
    // --用户角色编码已存在
    USER_ROLE_CODE_EXIST("4017", "用户角色编码已存在"),
    // --用户角色不存在
    USER_ROLE_NOT_EXIST("4018", "用户角色不存在"),

    // --字典不存在
    DICT_NOT_EXIST("4020", "字典不存在"),
    // --字典已存在
    DICT_EXIST("4020", "字典已存在"),
    // --字典项不存在
    DICT_ITEM_NOT_EXIST("4021", "字典项不存在"),
    // --字典项已存在
    DICT_ITEM_EXIST("4022", "字典项已存在"),
    // --字典项编码已存在
    DICT_ITEM_CODE_EXIST("4023", "字典项编码已存在"),

    // --部门已存在
    DEPT_EXIST("4030", "部门已存在"),
    // --部门不存在
    DEPT_NOT_EXIST("4031", "部门不存在"),

    // --菜单已存在
    MENU_EXIST("4040", "菜单已存在"),
    // --菜单不存在
    MENU_NOT_EXIST("4041", "菜单不存在"),

    // --审批申请已存在
    APPROVAL_APPLICATION_EXIST("4050", "审批申请已存在"),
    // --审批申请不存在
    APPROVAL_APPLICATION_NOT_EXIST("4051", "审批申请不存在"),


    // -- 配置错误
    // 配置键已经存在
    CONFIG_KEY_EXIST("6000", "配置键已经存在"),
    // 配置键不存在
    CONFIG_KEY_NOT_EXIST("6001", "配置键不存在"),

    // 验证码已过期
    CAPTCHA_EXPIRED("7000", "验证码已过期"),
    // 验证码错误
    CAPTCHA_ERROR("7001", "验证码错误"),

    // --未知异常编码
    UNKNOWN_ERROR("9999", "未知异常");
    ;

    private final String code;
    private final String desc;
}
